#include<iostream>
#include<unistd.h>
#include<pthread.h>
#include<stdlib.h>
#include<queue>
#include<time.h>
#include <sys/types.h>

#include "BlockQueue.hpp"
void* consumer(void* arvg)
{
    // 先安全的强制转换一下
    BlockQueue<int>* BQ = static_cast<BlockQueue<int>*>(arvg);
    while(1)
    {
       int getdata;
       BQ->pop(&getdata);
       
       std::cout << "从阻塞队列中获取到了数据data = " << getdata << std::endl; 

       sleep(1);
    }
}

void* producer(void* arvg)
{
    BlockQueue<int>* BQ = static_cast<BlockQueue<int>*>(arvg);
    while(1)
    {
        //生产更乱的随机数
        srand((unsigned int)time(nullptr) ^ getpid() );
        int data = rand()  % 10  +  1;
        BQ->push(data);
        std::cout << "我生产了data = " << data << std::endl;
        //我每隔一秒发送一个信息，达到了 生产和消费不均，体现出队列的作用
        //sleep(1);
    }
}


int main()
{
    pthread_t t1,t2;
    BlockQueue<int> BQ;
    pthread_create(&t1,nullptr,consumer,&BQ);
    pthread_create(&t2,nullptr,producer,&BQ);

    while(1);

    pthread_join(t1,nullptr);
    pthread_join(t2,nullptr);


    return 0;
}